Рейтинговые книги
Читем онлайн Графические интерфейсы пользователя Java - Тимур Сергеевич Машнин

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 24 25 26 27 28 29 30 31 32 ... 59
в этом классе и его поддерживающих классах.

Большинство компонентов снабжены обработчиком передачи TransferHandler по умолчанию.

Вы можете создать и установить свой собственный обработчик переноса для любого компонента.

В этом примере показана реализация переноса данных для метки, которая не имеет этой функциональности по умолчанию.

Здесь мы создаем объект TransferHandler с помощью конструктора, в котором указываем Java Bean свойство компонента, используемое для переноса данных.

Помним, что Swing компоненты является Java Bean компонентами и их свойства можно получить с помощью интерфейса Java Bean API, а именно класса BeanInfo.

Здесь используется свойство text метки.

Установкой объекта TransferHandler для метки мы включаем перенос текста в метку.

Для включения переноса текста из метки, мы присоединяем слушателя событий мыши к метке, и в обработчике нажатия клавиши мыши на источнике данных, в данном случае это метка, мы применяем к объекту TransferHandler метод exportAsDrag, который переносит данные из источника данных.

Создание собственного Swing компонента

Мы уже создавали собственный AWT компонент, расширяя класс Component и переопределяя его метод paint.

Для создания собственного Swing компонента нужно расширить класс JComponent, переопределив его метод paintComponent.

Метод paintComponent – это место, где должен быть размещен весь код рисования компонента.

Этот метод будет вызываться операционной системой всякий раз, когда нужно визуализировать компонент.

Но на самом деле рисование компонента начинается выше в иерархии классов вызовом метода paint AWT класса Component.

Далее метод paint вызывает поочередно методы paintComponent, paintBorder и paintChildren класса JComponent.

Как уже было сказано, большинство стандартных компонентов Swing имеют внешний вид, реализованный отдельными делегатами пользовательского интерфейса.

Это означает, что рисование стандартных компонентов Swing происходит следующим образом.

Метод paint вызывает paintComponent.

Если свойство ui не равно null, то есть для компонента есть делегат, мето paintComponent вызывает метод ui. update.

Если свойство компонента opaque истинно, метод ui. update заполняет фон компонента цветом и вызывает метод ui.paint.

Метод ui.paint отображает содержимое компонента.

Поэтому если мы создаем собственный компонент, расширяя конкретный Swing компонент, в методе paintComponent нужно вызвать этот метод суперкласса, чтобы сначала отрисовался делегат.

Другой способ декорировать существующий Swing компонент – это использовать компонент JLayer.

JLayer – это универсальный декоратор для компонентов Swing, который позволяет реализовывать различные расширенные эффекты рисования, а также получать уведомления обо всех AWT событиях.

Компонент JLayer делегирует рисование и обработку входных событий объекту LayerUI.

То есть компонент JLayer служит оберткой вокруг существующего Swing компонента, передавая функциональность рисования и обработки событий объекту LayerUI.

Таким образом, для рисования на существующем Swing компоненте, нужно создать класс, расширяющий класс LayerUI, и реализующий его метод paint.

Затем нужно создать компонент JLayer на основе существующего Swing компонента и объекта LayerUI.

Краткий обзор платформы JavaFX

JavaFX была создана как универсальная платформа, предоставляющая современные GUI-компоненты с возможностью их декларативного описания, богатый набор библиотек для работы с медиаконтентом и 2D/3D графикой, а также высокопроизводительную среду выполнения приложений.

Look and feel JavaFX интерфейса изменяется не с помощью делегатов, как в Swing, а с помощью CSS таблиц, тем самым разделяя внешний вид от кода.

Кроме того, вы можете разрабатывать внешний вид интерфейса не на языке Java, а на скриптовом языке FXML, а Java-код использовать для логики приложения.

Для визуальной разработки интерфейса вы можете использовать редактор JavaFX Scene Builder, который генерирует FXML разметку.

Для начала мы кратко пробежимся по тому объему знаний, который мы затем будем разбирать шаг за шагом.

Компоненты графического интерфейса пользователя платформы JavaFX представлены такими пакетами JavaFX API как

scene.control,

scene.chart,

scene.image,

scene.layout,

scene.media,

scene.shape,

scene.canvas,

scene. text,

scene. web и

stage.

Все компоненты GUI-интерфейса являются объектами Node узлов графа сцены и характеризуются идентификатором, CSS-стилем, границами, визуальными эффектами, прозрачностью, трансформациями, обработчиками событий, состоянием, режимом наложения и участием в анимации.

Пакет scene.control предоставляет такие компоненты графического интерфейса пользователя как панель Accordion, кнопку Button, переключатель CheckBox, список ChoiceBox, выбор цвета ColorPicker, выпадающий список ComboBox, выбор даты DatePicker, контекстное меню ContextMenu, гиперссылку Hyperlink, метку Label, список ListView, меню Menu, панель MenuBar, кнопку MenuButton, постраничную навигацию Pagination, поле PasswordField, индикатор ProgressBar, индикатор ProgressIndicator, переключатель RadioButton, панель ScrollPane, прокрутку ScrollBar, разделитель Separator, бегунок Slider, кнопку SplitMenuButton, панель SplitPane, таблицу TableView, панель TabPane, поле TextArea, поле TextField, панель TitledPane, кнопку ToggleButton, группу ToggleGroup, панель ToolBar, окно Tooltip, таблицу TreeTableView, дерево TreeView.

Пакет scene.chart обеспечивает создание диаграмм AreaChart, BarChart, BubbleChart, LineChart, PieChart, ScatterChart, StackedAreaChart, StackedBarChart.

Пакет scene.image предоставляет компоненты изображения ImageView и WritableImage.

Пакет scene.layout предоставляет панели компоновки AnchorPane, BorderPane, FlowPane, GridPane, HBox, StackPane, TilePane, VBox.

Пакет scene.media предоставляет компоненты медиаконтента MediaView и аудиоконтента AudioClip.

Пакет scene.shape обеспечивает рисование 2D геометрических форм с помощью таких компонентов как Arc, Circle, CubicCurve, Ellipse, Line, Path, Polygon, Polyline, QuadCurve, Rectangle, SVGPath, а также 3D графики с помощью таких GUI-компонентов как Box, Cylinder, MeshView, Sphere.

Пакет scene.canvas позволяет с помощью классов Canvas и GraphicsContext создавать изображения 2D-графики из простых геометрических форм, из существующих изображений и текста.

Пакет scene. text предоставляет компоненты текста Text и TextFlow.

Пакет scene. web обеспечивает отображение HTML-контента с помощью компонента WebView и редактирование HTML-контента с помощью компонента HTMLEditor.

Пакет scene предоставляет группу Group и сцену Scene, а также камеры ParallelCamera и PerspectiveCamera и источники света AmbientLight и PointLight.

Пакет stage предоставляет компоненты окон Stage, Popup, DirectoryChooser и FileChooser.

Пакеты embed. swing и embed. swt обеспечивают встраивание JavaFX компонентов в Swing (и наоборот) и SWT приложения.

Пакет css позволяет определять пользовательские свойства и CSS псевдо классы для компонентов.

Пакет print обеспечивает печать узла графа JavaFX сцены.

Пакет fxml обеспечивает декларативное XML описание GUI-компонентов.

Пакет scene. effect позволяет присоединять к GUI-компонентам визуальные эффекты смешивания, свечения, тени, размытия, цвета, смещения, освещения, перспективы, отражения, старения.

Пакет animation позволяет добавлять трансформации и анимации для GUI-компонентов.

Отображение 2D графики в JavaFX-приложениях возможно тремя способами:

1 ... 24 25 26 27 28 29 30 31 32 ... 59
На этой странице вы можете бесплатно читать книгу Графические интерфейсы пользователя Java - Тимур Сергеевич Машнин бесплатно.

Оставить комментарий